package com.example.crm.service.impl;

import com.example.crm.mapper.CustomerMapper;
import com.example.crm.pojo.Customer;
import com.example.crm.pojo.CustomerExample;
import com.example.crm.service.ICustomerService;
import lombok.Getter;
import lombok.Setter;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.inject.Inject;
import javax.inject.Named;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

@Component(value = "customerService")
@Setter
@Getter
public class CustomerServiceImpl implements ICustomerService {
    //简单类型的注入
    @Value("Rose")
    private String name="Jack";

    //复杂类型的注入

    /*第一种： 使用@Value 结合SpEL  ---- spring3.0 后用
    其中customerDao表示<bean>节点id的属性值*/
    /*@Value(value="#{customerMapper}")
    CustomerMapper customerMapper;*/

    /*第二种：使用@Autowired 结合 @Qualifier
    单独使用@Autowired ，表示按照类型注入，会到spring容器中查找CustomerDao的类型，对应<bean class=””>，class的属性值，如果找到，可以匹配。*/
    @Autowired
    CustomerMapper customerMapper;

    /*第三种： JSR-250标准（基于jdk） 提供注解@Resource
    单独使用@Resource注解，表示先按照名称注入，会到spring容器中查找customerDao的名称，对应<bean id=””>，id的属性值，如果找到，可以匹配。
    如果没有找到，则会按照类型注入，会到spring容器中查找CustomerDao的类型，对应<bean class=””>，class的属性值，如果找到，可以匹配，如果没有找到会抛出异常。*/
    /*@Resource(name="customerMapper")
    CustomerMapper customerMapper;*/

    /*第四种： JSR-330标准（jdk） 提供 @Inject （麻烦点）
    需要先导入 javax.inject 的 jar ，在课前资料中查找。*/
    /*@Inject//默认按照类型注入
    @Named("customerMapper")//按照名字注入，必须配合@Inject使用
    CustomerMapper customerMapper;*/



    public List<Customer> findAll() {
        return customerMapper.selectByExample(null);
    }

    @Override
    public List<Customer> findUser(Customer customer) {
        return customerMapper.selectByExample2(customer);
    }

    @Override
    public int saveUser(Customer customer) {
        int i = customerMapper.insert(customer);
        /*sqlSession.commit();
        sqlSession.close();*/
        return i;
    }

    @Override
    public int updateUser(Customer customer) {
        int i=customerMapper.updateByPrimaryKey(customer);
        /*sqlSession.commit();
        sqlSession.close();*/
        return i;
    }

    @Override
    public int deleteUser(long id) {
        int i = customerMapper.deleteByPrimaryKey(id);
        /*sqlSession.commit();
        sqlSession.close();*/
        return i;
    }

}
